/*******************************************

Teste da diretiva cobegin

*******************************************/#include <cpar.h>
static CPARContext *pGlobalContext;
typedef struct CPARGlobalStackData{
long __CPAR_VERSION__;
}CPARGlobalStackData;
static CPARGlobalStackData *pGlobalStack;

void CPARBlock_4(CPARContext *pContext);
void CPARBlock_3(CPARContext *pContext);
void CPARBlock_2(CPARContext *pContext);
void CPARBlock_1(CPARContext *pContext);

#include <stdio.h>

void bloco(int n);

void bloco(int n)
{
   int i;
   for(i=0;i<200;i++)
   {
      printf("%d",n);
      fflush(stdout);
   }
}


void CPARBlock_4(CPARContext *pContext){
printf("nivel a.2\n");
      fflush(stdout);
      bloco(4);}
void CPARBlock_1(CPARContext *pContext){
printf("nivel a.1\n");
      fflush(stdout);
	  bloco(1);
      CPARContextRunParallels(pGlobalContext,2,CPARBlock_2,CPARBlock_3); 
         
      
         
      
      printf("novos blocos nivel b\n");
      fflush(stdout);}
void CPARBlock_3(CPARContext *pContext){
printf("nivel b.2\n");
         fflush(stdout);
		 bloco(3);}
void CPARBlock_2(CPARContext *pContext){
printf("nivel b.1\n");
         fflush(stdout);
		 bloco(2);}int main(int argc, char **argv)
{
   CPARInit();if( CPARContextCreate( NULL, &pGlobalContext, sizeof(CPARGlobalStackData) )){  CPAR_ERROR("Falha ao alocar contexto global");  return CPAR_E_NO_MEMORY;}pGlobalStack = (CPARGlobalStackData*) CPARContextStackGet(pGlobalContext);if( CPARContextWorkPoolCreate( pGlobalContext, 4)){CPAR_ERROR("Falha ao alocar work pool");return -1;}CPAR_DEFINE_VERSION;;
   printf("Inicio\n");
   printf("blocos\n");
   fflush(stdout);
   CPARContextRunParallels(pGlobalContext,2,CPARBlock_1,CPARBlock_4);
      
   
      
   
   printf("Fim\n");
return 0;}